package com.smedi.ismedi.inmail.core.application.query;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smedi.ismedi.inmail.core.application.command.AnnouncementListQuery;
import com.smedi.ismedi.inmail.core.application.command.AnnouncementOneQuery;
import com.smedi.ismedi.inmail.core.application.command.AnnouncementPageQuery;
import com.smedi.ismedi.inmail.core.application.command.DownloadFileToZipCommand;
import com.smedi.ismedi.inmail.core.domain.aggregatemodel.announcement.Announcement;
import com.smedi.ismedi.inmail.core.domain.aggregatemodel.announcement.AttachmentKeyAndTime;

import java.util.List;

/**
 * 通知公告查询服务
 *
 * @author jiangqinxuan
 * @date 2021/07/30
 */
public interface AnnouncementQueryService {
    /**
     * 通知公告管理查询
     *
     * @param announcementOneQuery 查询条件
     * @return Page<AnnouncementManagementQueryVo>
     */
    Announcement getAnnouncementOne(AnnouncementOneQuery announcementOneQuery);

    /**
     * 通知公告管理查询
     *
     * @param announcementListQuery 查询条件
     * @return Page<AnnouncementManagementQueryVo>
     */
    List<Announcement> getAnnouncementList(AnnouncementListQuery announcementListQuery);

    /**
     * 通知公告管理查询
     *
     * @param announcementListQuery 查询条件
     * @return Page<AnnouncementManagementQueryVo>
     */
    List<Announcement> getAnnouncementListInManagement(AnnouncementListQuery announcementListQuery);

    /**
     * 通知公告管理查询
     *
     * @param announcementPageQuery 查询条件
     * @return Page<AnnouncementManagementQueryVo>
     */
    Page<Announcement> getAnnouncementPageInManagement(AnnouncementPageQuery announcementPageQuery);

    /**
     * 个人通知公告查询
     *
     * @param announcementPageQuery 查询条件
     * @return Page<AnnouncementManagementQueryVo>
     */
    Page<Announcement> getAnnouncementPageInPerson(AnnouncementPageQuery announcementPageQuery);

    /**
     * 通知公告列表查询（手机端）
     *
     * @param announcementPageQuery 查询条件
     * @return Page<AnnouncementManagementQueryVo>
     */
    Page<Announcement> getAnnouncementPage(AnnouncementPageQuery announcementPageQuery);

    /**
     * 查询附件列表
     * @param downloadFileToZipCommand 下载条件
     * @return List<String>
     */
    List<AttachmentKeyAndTime> getAttachmentKeyList(DownloadFileToZipCommand downloadFileToZipCommand);
}
